package www.wmx.com.xssc.util.similarity;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EnglishKeywordExtractor {

    // 检查一个字符是否是英文字母
    private static boolean isEnglishLetter(char c) {
        return Character.isLetter(c) && !Character.isIdeographic(c);
    }

    // 提取英文关键词
    public static List<String> extractEnglishKeywords(String text) {
        List<String> keywords = new ArrayList<>();
        StringBuilder currentKeyword = null;

        for (int i = 0; i < text.length(); i++) {
            char c = text.charAt(i);
            if (isEnglishLetter(c)) {
                // 如果当前字符是英文字母，且没有开始构建关键词，则开始构建
                if (currentKeyword == null) {
                    currentKeyword = new StringBuilder(String.valueOf(c));
                } else {
                    // 如果已经在构建关键词，则追加当前字符
                    currentKeyword.append(c);
                }

                // 检查下一个字符是否为英文字母或数字（可选，根据需求而定）
                if (i < text.length() - 1) {
                    char nextChar = text.charAt(i + 1);
//                    // 如果下一个字符是字母或数字，通常视为同一关键词的一部分（如"Java123"）
//                    if (Character.isLetterOrDigit(nextChar)) {
//                        // 不进行任何操作，继续循环
//                    } else {
//                        // 如果不是，则可能当前关键词已经结束
//                        // 注意：这里假设单词之间由非字母非数字字符分隔
//                        // 你可能需要根据实际情况调整这个逻辑（例如处理连字符等）
//                    }
                    if(nextChar==' '){
                        currentKeyword.append(' ');
                        i++;
                    }
                }
            } else {
                // 如果当前字符不是英文字母，且之前已经开始构建关键词，则添加关键词到列表并重置
                if (currentKeyword != null) {
                    keywords.add(currentKeyword.toString());
                    currentKeyword = null;
                }
            }
        }

        // 检查最后一个关键词（如果有的话）
        if (currentKeyword != null) {
            keywords.add(currentKeyword.toString());
        }

        return keywords;
    }


    public static String processText(String text) {
        // 正则表达式，匹配以序号开头的段落，段落之间以换行符分隔
        String regex = "(?m)^(\\（[0-9]+\\）\\s.*)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);

        // 用来存储不重复的段落
        Set<String> uniqueParagraphs = new HashSet<>();

        // 遍历所有匹配的段落
        while (matcher.find()) {
            String paragraph = matcher.group();
            // 假设整个段落（包括序号）是唯一的，这里简单添加到Set中去重
            // 如果需要更复杂的去重逻辑（比如只去重序号和其后的部分内容），则需要额外处理
            uniqueParagraphs.add(paragraph);
        }

        // 将去重后的段落组合成新的字符串，这里简单使用换行符连接
        StringBuilder result = new StringBuilder();
        for (String paragraph : uniqueParagraphs) {
            result.append(paragraph).append("\n");
        }

        // 移除末尾可能多余的换行符
        if (result.length() > 0 && result.charAt(result.length() - 1) == '\n') {
            result.setLength(result.length() - 1);
        }

        return result.toString();
    }

}